home *** CD-ROM | disk | FTP | other *** search
/ HAM Radio 1997 / HAM Radio 1997.iso / vcls / wfc007.000 / include / cservice.hpp < prev    next >
C/C++ Source or Header  |  1996-04-08  |  3KB  |  97 lines

  1. #if ! defined( SERVICE_CLASS_HEADER )
  2.  
  3. /*
  4. ** Author: Samuel R. Blackburn
  5. ** CI$: 76300,326
  6. ** Internet: sammy@sed.csc.com
  7. **
  8. ** You can use it any way you like.
  9. */
  10.  
  11. #define SERVICE_CLASS_HEADER
  12.  
  13. extern CRITICAL_SECTION g_ServiceCriticalSection;
  14.  
  15. #define SERVICE_NAME_LEN   256
  16. #define ACCEPT_FLAGS ( SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE | SERVICE_ACCEPT_SHUTDOWN )
  17.  
  18. class CService : public CObject
  19. {
  20.    private:
  21.  
  22.       void m_Initialize( void );
  23.  
  24.    public:
  25.  
  26.       static CService *m_Service_p;
  27.  
  28.       CService( LPTHREAD_START_ROUTINE pThread, DWORD dwControlsAccepted = ACCEPT_FLAGS, DWORD dwWaitHint = 5000 );
  29.  
  30.       /*
  31.       ** Destructor should be virtual according to MSJ article in Sept 1992
  32.       ** "Do More with Less Code:..."
  33.       */
  34.  
  35.       virtual ~CService( void );
  36.  
  37.       virtual BOOL Initialize( LPCTSTR pName );
  38.       void LogEvent( WORD EventType = EVENTLOG_ERROR_TYPE, LPTSTR pMsgStr = 0, DWORD dwError = NO_ERROR );
  39.  
  40.    protected:
  41.  
  42.       HANDLE m_ExitEventHandle;
  43.       HANDLE m_ThreadHandle;
  44.  
  45.       DWORD m_ControlsAccepted;
  46.       DWORD m_CurrentState;
  47.       DWORD m_ErrorCode;
  48.       DWORD m_ThreadId;
  49.       DWORD m_WaitHint;
  50.  
  51.       LPTHREAD_START_ROUTINE m_ThreadStartRoutine;
  52.  
  53.       SERVICE_STATUS_HANDLE m_ServiceStatusHandle;
  54.  
  55.       BOOL m_Debugging;
  56.       BOOL m_Running;
  57.       BOOL m_Paused;
  58.       BOOL m_Exiting;
  59.  
  60.       SERVICE_TABLE_ENTRY m_ServiceTable[ 2 ];
  61.  
  62.       char m_ServiceName[ SERVICE_NAME_LEN + 1 ];
  63.  
  64.       static void CALLBACK ServiceControlManagerHandler( DWORD dwControlCode );
  65.       static void CALLBACK ServiceMain( DWORD Argc, LPTSTR *argv );
  66.  
  67.       virtual void AssertValid( void ) const;
  68.       virtual void ParseCommandLineParameters( DWORD Argc, LPTSTR *Argv );
  69.       virtual void OnControlCode( DWORD dwControlCode );
  70.       virtual void OnStop( void );
  71.       virtual void OnPrepareServiceThread( void );
  72.       virtual void OnPause( void );
  73.       virtual void OnContinue( void );
  74.  
  75.       void Exit( void );
  76.  
  77.       BOOL SendStatusToServiceControlManager( DWORD CurrentState,
  78.                                               DWORD Win32ExitCode = NO_ERROR,
  79.                                               DWORD CheckPoint = 0, 
  80.                                               DWORD WaitHint = 0,
  81.                                               DWORD ServiceSpecificCode = NO_ERROR );
  82.  
  83. #if defined ( _DEBUG )
  84.    void DumpStatus( SERVICE_STATUS *pStatus ) const;
  85. #endif
  86.  
  87. private:
  88.  
  89.    // not-implemented:
  90. //   CNtService& operator= (const CNtService& rhs);  // assignment operator
  91.   // CNtService (const CNtService& rhs);             // copy constructor
  92.    //CNtService* operator& (void);                   // address-of operators
  93.    //const CNtService* operator& (void) const;
  94. };
  95.  
  96. #endif // SERVICE_CLASS_HEADER
  97.